perm filename M2.FOR[M11,LCS] blob
sn#373983 filedate 1978-11-24 generic text, type T, neo UTF8
CGEN1 FUNCTION GENERATOR 1
C *** MUSIC V ***
SUBROUTINE GEN1
CC DIMENSIONI(15000),P(100),IP(20)
COMMON I(1)/P/ P(1)/PARM/IP(1)
EQUIVALENCE (IP6,IP(6))
CX PAUSE 'GEN 1, TOP'
N1=IP(2)+(IFIX(P(4))-1)*IP6
M1=7
SCLFT=IP(15)
102 IF(P(M1+1))103,103,100
100 V1=P(M1-2)*SCLFT
V2=(P(M1)-P(M1-2))/(P(M1+1)-P(M1-1))*SCLFT
MA=N1+IFIX(P(M1-1))
MB=N1+IFIX(P(M1+1))-1
DO 101J=MA,MB
XJ=J-MA
101 I(J)=V1+V2*XJ
IF(IFIX(P(M1+1)).EQ.(IP6-1))GO TO 103
M1=M1+2
GO TO 102
103 I(MB+1)=P(M1)*SCLFT
CX PAUSE 'GEN 1, RETURN'
RETURN
END
CGEN2 FUNCTION GENERATOR 2
C *** MUSIC V ***
SUBROUTINE GEN2
DIMENSION A(1000)
CC DIMENSIONI(15000),P(100),IP(20),A(7000)
CC COMMONI,P/PARM/IP
COMMON I(1)/P/ P(1)/PARM/IP(1)
EQUIVALENCE(I,A),(IP6,IP(6))
CX PAUSE 'GEN 2, TOP'
SCLFT=IP(15)
N1=IP(2)+(IFIX(P(4))-1)*IP6
N2=N1+IP6-1
DO 101K1=N1,N2
101 A(K1)=0.0
FAC=6.283185/(FLOAT(IP6)-1.0)
NMAX=I(1)
N3=5+INT(ABS(P(NMAX)))-1
IF(N3-5)104,100,100
100 DO 103J=5,N3
FACK=FAC*FLOAT(J-4)
DO 102K=N1,N2
102 A(K)=A(K)+SIN(FACK*FLOAT(K-N1))*P(J)
103 CONTINUE
104 N4=N3+1
N5=I(1)-1
IF(N5-N4)114,105,105
105 DO 107J1=N4,N5
FACK=FAC*FLOAT(J1-N4)
DO 106K1=N1,N2
106 A(K1)=A(K1)+COS(FACK*FLOAT(K1-N1))*P(J1)
107 CONTINUE
114 CONTINUE
IF(P(NMAX))112,112,108
108 FMAX=0.0
DO 110K2=N1,N2
IF(ABS(A(K2))-FMAX)110,110,109
109 FMAX=ABS(A(K2))
110 CONTINUE
113 DO 111K3=N1,N2
111 I(K3)=(A(K3)*SCLFT*.99999)/FMAX
CX PAUSE 'GEN 2, RETURN'
RETURN
112 FMAX=.99999
GO TO 113
END
CGEN3 FUNCTION GENERATOR 3
C *** MUSIC V ***
C ASSUMPTIONS--P(4) = THE NUMBER OF THE FUNCTION TO BE GENERATED,
C I(1) = WORD COUNT FOR CURRENT DATA RECORD
C P(5) = THE BEGINNING THE THE LIST OF DESCRIPTION NUMBERS
C IP(2) = THE BEGINNING SUBSCRIPT FOR FUNCTIONS IN THE I ARRAY,
C IP(6) = THE LENGTH OF THE FUNCTIONS
C IP(15) = SCALE FACTOR FOR STORED FUNCTIONS
C
CCC SUBROUTINE GEN3
CCC COMMON I(1)/P/ P(1)/PARM/IP(1)
CCX COMMON I(15000),P(100) /PARM/ IP(20)
CCC EQUIVALENCE (IP6,IP(6))
CCC N=I(1)-5
CCC NL=5
CCC SCLFT=IP(15)
CCC LL=IP6
CCC RMIN=0
CCC RMAX=0
CCC NR=NL+N
CCC DO 10 J=NL,NR
CCC IF(P(J).GT.RMAX) RMAX=P(J)
CCC10 IF(P(J).LT.RMIN) RMIN=P(J)
CCC DIV=AMAX1(ABS(RMIN),ABS(RMAX))
CCC N1 = IP(2) + (IFIX(P(4))-1)*IP6
CCC I(N1)=(P(NL)/DIV)*SCLFT
CCC LAST = N1
CCC DO 100 J=1,N
CCC LL = LL-LL/(N-J+1)
CCC IX = N1+IP6-LL-1
CCC IX2 = NL+J
CCC I(IX)=(P(IX2)/DIV)*SCLFT
CCC DELTA=FLOAT(I(IX))-FLOAT(I(LAST))
CCC NR = IX-LAST-1
CCC SEG = NR+1
CCC HNCR=DELTA/SEG
CCC DO 50 K=1,NR
CCC IX2 = LAST+K
CCC 50 I(IX2)=FLOAT(I(IX2-1))+HNCR
CCC100 LAST=IX
CCC RETURN
CCC END
CDATA3 PASS 3 DATA INPUTING ROUTINE
C *** MUSIC V ***
SUBROUTINE DATA (N)
COMMON I(1)/P/ P(1) /FINOUT/JPEAK,NN,IPEAK
CC COMMON I(15000),P(100)
EQUIVALENCE (K,I),(P2,P(2))
READ (N) K,(P(J),J=1,K)
TYPE 1,P2
CC I(1)=K
IF(JPEAK.LE.IPEAK)RETURN
TYPE 2,JPEAK
IPEAK=JPEAK
C TYPES OUT EACH NEW PEAK AMPL.
RETURN
1 FORMAT('+',F9.2,$)
2 FORMAT('+ AMPL=',I4,$)
END
CPARM CONTROL DATA SPECIFICATION FOR PASS 3
C *** MUSIC V ***
C
C IP(1) = NUMBER OF OP CODES
C IP(2) = BEGINNING SUBSCRIPT OF FIRST FUNCTION
C IP(3) = STANDARD SAMPLING RATE
C IP(4) = BEGINNING SUBSCRIPT OF INSTRUMENT DEFINITIONS
C IP(5) = BEGINNING OF LOCATION TABLE FOR INSTRUMENT DEFINITIONS
C IP(6) = LENGTH OF FUNCTIONS
C IP(7) = BEGINNING OF NOTE CARD PARAMETERS
C IP(8) = LENGTH OF NOTE CARD PARAMETER BLOCKS
C IP(9) = NUMBER OF NOTE CARD PARAMETER BLOCKS
C IP(10)= BEGINNING OF OUTPUT DATA BLOCK
C IP(11)= SOUND ZERO (SILENCE VALUE)
C IP(12)= SCALE FACTOR FOR NOTE CARD PARAMETERS
C IP(13)= BEGINNING OF GENERATOR INPUT-OUTPUT BLOCKS
C IP(14)= LENGTH OF GENERATOR INPUT-OUTPUT BLOCKS
C IP(15)= SCALE FACTOR FOR FUNCTIONS
C
BLOCK DATA
COMMON /PARM/IP(20)
DATA IP/12,512,10000, 7100, 7000,512, 6000,35,27,4487,2048,
1 16 ,4487,512, "77777 ,5*0/
CC DATA IP/12,512,10000,14500,14400,512,13000,35,40,6657,2048,
CC 1 "1000000,6657,512,"377777777777,5*0/
C*****BIG NUMB. IS IBM360'S BIGGEST. 1 65536,6657,512,Z7FFFFFFF/
END
CC****SUBROUTINE DUM
CC****ENTRY SAMGEN
CC****ENTRY GEN4
CC****ENTRY GEN5
CC****END
SUBROUTINE SAMGEN
RETURN
END
CCC SUBROUTINE GEN4
CCC END
CCC SUBROUTINE GEN5
CCC END
C **** DUMMY SUBROUTINES ****
SUBROUTINE FROUT3(IDSK)
C TERMINATE OUTPUT
INTEGER PEAK
COMMON I(1)/P/ P(1)/PARM/IP(1)/FINOUT/PEAK,NRSOR
CC COMMON I(15000),P(100)/PARM/IP(20)/FINOUT/PEAK,NRSOR
K=IP(10)
L=IP(10)+IP(14)-1
DO 1 J=K,L
1 I(J)=0
CALL SAMOUT(IDSK,IP(14))
CC REWIND NWRITE
CC WRITE (6,10) PEAK,NRSOR
TYPE 10,PEAK,NRSOR
CC*** CALL EXIT
IF(IDSK.LT.0)CALL EXIT
J=IP(10)
L=J+1024
DO 2 K=J,L
2 I(K)=0
C WILL WRITE 1024 0'S ON DSK.
C/// CALL FASTOUT(I(J),1024)
C/// CALL FINFILE
CALL EXIT
10 FORMAT ('0PEAK AMPLITUDE WAS',I8/'0NUMBER OF SAMPLES OUT OF RANGE
1WAS',I8)
END
CDSMOUT DEBUG SAMOUT 'C////'=CHANGES FOR PDP11 VERSION
C *** MUSIC V ***
C DEBUG SAMOUT
SUBROUTINE SAMOUT(IDSK,N)
DIMENSION IDBUF(512 )
C//// DIMENSION IDBUF(3071)
CZ DIMENSION IDBUF(2000),MS(3)
C*** IDSK IS FLAG TO WRITE SAMPLES ON DSK -- PDP *****
C*** IDBUF WILL STORE PACKED SAMPLES. ****
CC DIMENSIONI(15000),T(10),P(100),IP(20)
COMMON I(1)/P/ P(1)/PARM/IP(1)/FINOUT/PEAK,NRSOR
CC COMMON I,P/PARM/IP/FINOUT/PEAK,NRSOR
INTEGER PEAK
C//// MNST=768
C//// IF(I(8).NE.0)MNST=1536
CX IF(IDSK.GE.0)GO TO 99
CX N1=N
CX PRINT100,N1
CX 100 FORMAT(7H OUTPUTI6,8H SAMPLES)
CX N2=IP(10)-1
CX N3=10
CX GO TO 104
CX106 DO 101L=1,10
CX J=N2+L
CX101 T(L)=FLOAT(I(J))/FLOAT(IP(12))
CX PRINT102,(T(K),K=1,N3)
CX102 FORMAT(1H 10F11.4)
CX N2=N2+10
CX N1=N1-10
CX IF(N1)103,103,104
CX103 RETURN
CX104 IF(N1-10)105,106,106
CX105 N3=N1
CX GO TO 106
C////99 J=IDSK+1
C//// KOUT=MNST/3
M1=IP(10)
ISC=IP(12)
C** IP(12) IS NOTE PARAM SCALE FACTOR
C//// IDSK=IDSK+N
M2=0
C COUNTS SAMPLES TO DATE
C//// DO 1 K=J,IDSK
MNST=512
DO 1 K=1,512
J=M1+M2
N1=I(J)/ISC
I(J)=0
C***** ZERO THE ARRAY SO LAST TIME WILL WRITE ZEROS AFTER DONE. ****
IF(N1.GT.PEAK)PEAK=N1
IDBUF(K)=N1
1 M2=M2+1
WRITE(23)IDBUF
C//// IF(IDSK.LT.MNST)RETURN
C****MUS5TR****************************************
C//// KL=0
C************ BELOW IS FAIL ROUTINE TO PACK 3 SMPLS INTO 2 WD.
C//// DO 2 K=1,MNST,3
C//// KL=KL+1
C//// 2 CALL PACK(IDBUF(KL),IDBUF(K))
C************ ABOVE IS FAIL ROUTINE TO PACK 3 SMPLS INTO 2 WD.
C************ BELOW IS FORTRAN ROUTINE TO PACK 3 SMPLS INTO 2 WD.
CZ DO 2 K=1,768,3
CZ KL=KL+1
CZ KJ=K-1
CZ MS(1)=IDBUF(K)
CZ IF(MS(1).EQ.2048)MS(1)=2047
C A 2048 IN THE 12 LEFT HAND BITS CREATES PROBLEMS
CZ DO 3 L=2,3
CZ MS(L)=IDBUF(KJ+L)
CZ3 IF(MS(L).LT.0)MS(L)=4096+MS(L)
CZ2 IDBUF(KL)=MS(3)+MS(2)*4096+MS(1)*16777216
C PACKS 3 SMPLS TO A 36-BIT WORD. 4096=2**12, 16---=2**24.
C MS(1) HAS LEFT HAND 12 BITS; MS(2), MIDDLE 12 BITS; MS(3), RIGHT 12.
C NEGATIVE NUMBERS RUN FROM 4095(I.E. -1) TO 2049(I.E. -2048).
C************ ABOVE IS FORTRAN ROUTINE TO PACK 3 SMPLS INTO 2 WD.
C//// CALL FASTOU(IDBUF(1),KOUT)
C//// J=IDSK-MNST
C//// IF(J.LT.1)GO TO 4
C//// DO 5 K=1,J
C////5 IDBUF(K)=IDBUF(MNST+K)
C////4 IDSK=J
C****MUS5TR****************************************
RETURN
END
CERRO1 GENERAL ERROR ROUTINE
C *** MUSIC V ***
SUBROUTINE ERROR(I)
TYPE 100,I
100 FORMAT (' ERROR OF TYPE',I5)
RETURN
END